package com.yupi.springbootinit.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.yupi.springbootinit.model.entity.Department;
import com.yupi.springbootinit.model.vo.DepartmentUserStatVO;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * 部门数据库操作
 */
public interface DepartmentMapper extends BaseMapper<Department> {

    /**
     * 根据部门编码查询部门
     *
     * @param departmentCode 部门编码
     * @return 部门信息
     */
    Department selectByDepartmentCode(@Param("departmentCode") String departmentCode);

    /**
     * 根据部门名称查询部门
     *
     * @param departmentName 部门名称
     * @return 部门信息
     */
    Department selectByDepartmentName(@Param("departmentName") String departmentName);

    /**
     * 获取部门用户统计信息
     *
     * @return 部门用户统计列表
     */
    List<DepartmentUserStatVO> getDepartmentUserStatistics();

    /**
     * 批量更新用户部门
     *
     * @param oldDepartmentId 原部门ID
     * @param newDepartmentId 新部门ID
     * @return 更新的记录数
     */
    int batchUpdateUserDepartment(@Param("oldDepartmentId") Long oldDepartmentId, 
                                  @Param("newDepartmentId") Long newDepartmentId);

    /**
     * 获取部门下的用户数量
     *
     * @param departmentId 部门ID
     * @return 用户数量
     */
    Long countUsersByDepartmentId(@Param("departmentId") Long departmentId);

    /**
     * 检查部门编码是否存在（排除指定ID）
     *
     * @param departmentCode 部门编码
     * @param excludeId 排除的部门ID
     * @return 存在的数量
     */
    Long checkDepartmentCodeExists(@Param("departmentCode") String departmentCode, 
                                   @Param("excludeId") Long excludeId);

    /**
     * 检查部门名称是否存在（排除指定ID）
     *
     * @param departmentName 部门名称
     * @param excludeId 排除的部门ID
     * @return 存在的数量
     */
    Long checkDepartmentNameExists(@Param("departmentName") String departmentName, 
                                   @Param("excludeId") Long excludeId);
}